const db = wx.cloud.database()
// 输入文字最大的个数
const MAX_WORDS_NUM = 140
// 最大上传图片数量
const MAX_IMG_NUM = 9
// 输入的文字内容
let content = ''
// 用户信息，包含头像和昵称
let userInfo = {}

Page({
    /**
     * 页面的初始数据
     */
    data: {
        // 已输入的文字个数
        wordsNum: 0,
        footerBottom: 0,
        images: [],
        enableSelectPhoto: true
    },

    /**
     * 生命周期函数--监听页面加载
     */
    onLoad(options) {
        userInfo = options
    },

    // 监听文本框的输入
    onInput(event) {
        content = event.detail.value
        let wordsNum = content.length
        if (wordsNum >= MAX_WORDS_NUM) {
            wordsNum = `最大字数为${MAX_WORDS_NUM}`
        }
        this.setData({
            wordsNum
        })
    },

    // 监听文本框的聚焦
    onFocus(event) {
        // 模拟器获取的键盘高度为0，需真机演示
        this.setData({
            footerBottom: event.detail.height,
        })
    },

    // 监听文本框的离焦
    onBlur() {
        this.setData({
            footerBottom: 0,
        })
    },

    // 选择本地图片
    onChooseImage() {
        wx.chooseMedia({
            mediaType: 'image',
            count: MAX_IMG_NUM - this.data.images.length,
            sizeType: ['original', 'compressed'],
            sourceType: ['album', 'camera'],
            success: (res) => {
                const images = this.data.images
                res.tempFiles.map(item => {
                    item.tempFilePath && images.push(item.tempFilePath)
                })
                this.setData({
                    images
                })
                this.setData({
                    enableSelectPhoto: MAX_IMG_NUM - this.data.images.length > 0
                })
            },
        })
    },

    // 删除图片
    onDelImage(event) {
        this.data.images.splice(event.target.dataset.index, 1)
        this.setData({
            images: this.data.images
        })

        if (this.data.images.length === MAX_IMG_NUM - 1) {
            this.setData({
                enableSelectPhoto: true
            })
        }
    },

    // 预览图片
    onPreviewImage(event) {
        wx.previewImage({
            urls: this.data.images,
            current: event.target.dataset.imgsrc
        })
    },

    // 发布
    send() {
        // 1、图片 -> 云存储 fileID 云文件ID
        // 2、数据 -> 云数据库

        // 校验非空
        if (content.trim() === '') {
            wx.showModal({
                title: '请输入内容',
                content: ''
            })
            return
        }

        wx.showLoading({
            title: '发布中',
            mask: true
        })

        let promiseArr = []
        let fileIds = []

        // 1.上传图片
        if (this.data.images.length > 0) {
            for (let i = 0, len = this.data.images.length; i < len; i++) {
                console.log(1)
                const p = new Promise((resolve, reject) => {
                    const item = this.data.images[i]
                    const suffix = /\.\w+$/.exec(item)[0]
                    wx.cloud.uploadFile({
                        cloudPath: 'blog/' + Date.now() + '-' + Math.random() * 1000000 + suffix,
                        filePath: item,
                        success: (res) => {
                            fileIds = fileIds.concat(res.fileID)
                            resolve()
                        },
                        fail: (err) => {
                            console.error(err)
                            reject()
                        }
                    })
                })
                promiseArr.push(p)
            }
        }

        // 2.存入到云数据库
        Promise.all(promiseArr).then(res => {
            console.log('res', res)
            db.collection('blog').add({
                data: {
                    ...userInfo,
                    content,
                    img: fileIds,
                    createTime: db.serverDate()
                }
            }).then(res => {
                content = ''
                wx.hideLoading()
                wx.showToast({
                    title: '发布成功'
                })

                // 返回blog页面，刷新列表
                wx.navigateBack()
                const pages = getCurrentPages()
                const prevPage = pages[pages.length - 2]
                prevPage && prevPage.onPullDownRefresh()
            })
        }).catch(err => {
            wx.hideLoading()
            wx.showToast({
                icon: 'error',
                title: '发布失败'
            })
        })
    }
})